package org.proxycine.gestsalles.services;

import java.sql.Date;
import java.sql.Time;
import java.util.List;
import java.util.HashMap;
import java.util.Map;

import org.proxycine.gestsalles.model.entities.Cinema;
import org.proxycine.gestsalles.model.dao.SeanceDao;
import org.proxycine.gestsalles.model.entities.Copie;
import org.proxycine.gestsalles.model.entities.Format_seance;
import org.proxycine.gestsalles.model.entities.GenreFilm;
import org.proxycine.gestsalles.model.entities.Langue_seance;
import org.proxycine.gestsalles.model.entities.Salle;
import org.proxycine.gestsalles.model.entities.Seance;
import org.proxycine.gestsalles.model.entities.TypeSpectateur;

public class SeanceService {
        
        private static SeanceService instance;
        
        private SeanceService() {
                instance = this;
        }
        
        public static SeanceService getInstance() {
                if(instance == null)
                        instance = new SeanceService();
                
                return instance;
        }
        
        public Seance insertSeance(Copie copie, Salle salle, Time debutSeance, Date date_seance, Langue_seance langue, Format_seance format) {
            return SeanceDao.getInstance().insertSeance(copie, salle, debutSeance, date_seance, langue, format);
        }
        
        public void removeSeance(int id) {
            SeanceDao.getInstance().removeSeance(id);
        }
        
        public List<Seance> getProjectionsForLoggedManager(String managerLogin)
        {
                return SeanceDao.getInstance().getProjectionsForLoggedManager(managerLogin);
        }
        
        public List<Seance> getProjectionInOneRoomForLoggedManager(String managerLogin, Salle roomNumber)
        {
                return SeanceDao.getInstance().getProjectionInOneRoomForLoggedManager(managerLogin, roomNumber);
        }
        

        public Map<Cinema, Map<Date,Integer> > getAffluenceReseauParCinema(String dateDebut, String dateFin) {
        	
        	return SeanceDao.getInstance().getAffluenceReseauParCinema(dateDebut, dateFin);
        }
        
        public Map<GenreFilm, Map<Date, Integer> > getAffluenceReseauParGenre(String dateDebut, String dateFin) {
        	
        	return SeanceDao.getInstance().getAffluenceReseauParGenre(dateDebut, dateFin);        	
        }

        public Map<TypeSpectateur, Map<Date, Integer> > getAffluenceReseauParCategorieSpec(String dateDebut, String dateFin) {
        	
        	return SeanceDao.getInstance().getAffluenceReseauParCategorieSpec(dateDebut, dateFin);
        }
        
        public Map<Cinema, Integer> getPartAffluenceReseauParCinema(String dateDebut, String dateFin) {
        	
        	return SeanceDao.getInstance().getPartAffluenceReseauParCinema(dateDebut, dateFin);
        }
        
        public Map<GenreFilm, Integer> getPartAffluenceReseauParGenre(String dateDebut, String dateFin) {
        	
        	return SeanceDao.getInstance().getPartAffluenceReseauParGenre(dateDebut, dateFin);
        }
        
        public Map<TypeSpectateur, Integer> getPartAffluenceReseauParCategorieSpec(String dateDebut, String dateFin) {
        	
        	return SeanceDao.getInstance().getPartAffluenceReseauParCategorieSpec(dateDebut, dateFin);
        }
		
        public Map<Date,Integer> getAffluenceCinema(Cinema cinema, String dateDebut, String dateFin) {
        	
        	return SeanceDao.getInstance().getAffluenceCinema(cinema, dateDebut, dateFin);
        }
        
        public Map<GenreFilm, Map<Date,Integer> > getAffluenceCinemaParGenre(Cinema cinema, String dateDebut, String dateFin) {
        	
        	return SeanceDao.getInstance().getAffluenceCinemaParGenre(cinema, dateDebut, dateFin);
        }
        
        public Map<TypeSpectateur, Map<Date,Integer> > getAffluenceCinemaParCategorieSpec(Cinema cinema, String dateDebut, String dateFin) {
        	
        	return SeanceDao.getInstance().getAffluenceCinemaParCategorieSpec(cinema, dateDebut, dateFin);
        }
        
        public Map<GenreFilm, Integer> getPartAffluenceCinemaParGenre(Cinema cinema, String dateDebut, String dateFin) {
        	
        	return SeanceDao.getInstance().getPartAffluenceCinemaParGenre(cinema, dateDebut, dateFin);
        }
        
        public Map<TypeSpectateur, Integer> getPartAffluenceCinemaParCategorieSpec(Cinema cinema, String dateDebut, String dateFin) {
        	
        	return SeanceDao.getInstance().getPartAffluenceCinemaParCategorieSpec(cinema, dateDebut, dateFin);
        }
        
}
